import argsConfig from './args.config';

/**
 * 参数检查中间件
 * 所有需要读取请求参数的路由都应该调用主动该中间件
 * 该中间件会根据提供的参数名称去寻找指定的参数
 * 若都找到则将其放在 req.Datas 中，若有一个没找到则直接返回 "必填字段空缺"
 */
export default function (apiName) {
  /**
   * @type {Array<Args>} argsList 参数列表
   * @typedef Args
   * @property {string} name 参数名
   * @property {boolean} required 是否必填
   * @property {string} regex 正则表达式
   * @property {string} typeof 字段类型
   */
  const argsList = argsConfig[apiName];
  return (req, res, next) => {
    // 判断请求类型 获取不同的参数存放对象
    const methodType = Object.keys(req.route.methods)[0];
    let reqDatas = {};
    switch (methodType) {
      case 'get':
        reqDatas = req.query;
        break;
      case 'post':
        reqDatas = req.body;
        break;
      default:
        reqDatas = req.query;
    }
    let argNotExist = false;
    argsList.map((item) => {
      // 校验字段必填
      if (!argNotExist && !(item in reqDatas)) throw new Error('必填字段空缺');
      // 校验字段的正则
    });
    req.reqDatas = reqDatas;
    next();
  };
}
